/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef APPPLUGIN_NAS_PLUGINCONSTANTS_H
#define APPPLUGIN_NAS_PLUGINCONSTANTS_H
#include <cstdlib>
namespace {
    const std::string  dir_sep = "/";
    const std::string SMB_PROTOCOL = "0";
    const std::string NFS_PROTOCOL = "1";
    const std::string SMB_VERSION_3_1_1 = "3.1.1";
    const std::string SMB_VERSION_3_02 = "3.02";
    const std::string SMB_VERSION_3_0 = "3.0";
    const std::string SMB_VERSION_2_1 = "2.1";
    const std::string SMB_VERSION_2_0 = "2.0";
    const std::string SMB_ENCRYPTION = "1";
    const std::string NFSPORT = "111";
    const std::string CIFSPORT = "445";
    const std::string KRB5PREFIX = "/DataBackup/ProtectClient/ProtectClient-E/tmp/krb5_";
    const std::string KRB5CCPOSTFIX = ".tecket";
    const std::string KRB5CCNAMEPREFIX = "/DataBackup/ProtectClient/ProtectClient-E/tmp/tkt_";
    const std::string KRB5CCNAMEENVPREFIX = "FILE:";
    const std::string KRB5KEYTABPREFIX = "/DataBackup/ProtectClient/ProtectClient-E/tmp/krb5_";
    const std::string KRB5KEYTABPOSTFIX = ".keytab";
    const std::string KRB5CONFIGPREFIX = "/DataBackup/ProtectClient/ProtectClient-E/tmp/krb5_";
    const std::string KRB5CONFIGPOSTFIX = ".conf";
    const std::string KRB5AUTHMODE = "5";
    const std::string NATIVE_FILE_TYPE = "native";

    constexpr uint32_t RETRYTIMES3 = 3;

    constexpr int PROGRESS0 = 0;
    constexpr int PROGRESS50 = 50;
    constexpr int PROGRESS100 = 100;

    constexpr uint32_t ONE_MINUTE = 60;

    constexpr uint32_t BACKUP_REPORT_CIRCLE_TIME_IN_SEC = 120;

    constexpr int EXECUTE_SUBTASK_MONITOR_DUR_IN_SEC = 20;
    constexpr int GENERATE_SUBTASK_MONITOR_DUR_IN_SEC = 10;
    constexpr int SUBTASK_WAIT_FOR_SCANNER_READY_IN_SEC = 1;

    constexpr uint32_t SUBJOB_TYPE_ANY = 0;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_COPY_PHASE = 1;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_DELETE_PHASE = 2;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_HARDLINK_PHASE = 3;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_DIRMTIME_PHASE = 4;
    constexpr uint32_t SUBJOB_TYPE_TEARDOWN_PHASE = 5;
    constexpr uint32_t SUBJOB_TYPE_COPYMETA_PHASE = 6;
    constexpr uint32_t SUBJOB_TYPE_CREATE_SUBJOB_PHASE = 7;
    constexpr uint32_t SUBJOB_TYPE_SET_CHANNELS_PHASE = 8;
    constexpr uint32_t SUBJOB_TYPE_CHECK_SUBJOB_PHASE = 9;


    // create subjob priority should bigger than business subjob
    constexpr uint32_t SUBJOB_TYPE_CREATE_SUBJOB_PHASE_PRIO = 20;

    constexpr uint32_t SUBJOB_TYPE_SET_CHANNELS_PHASE_PRIO = 10;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_COPY_PHASE_PRIO = 20;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_DELETE_PHASE_PRIO = 30;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_HARDLINK_PHASE_PRIO = 40;
    constexpr uint32_t SUBJOB_TYPE_DATACOPY_DIRMTIME_PHASE_PRIO = 50;
    constexpr uint32_t SUBJOB_TYPE_AGGREGATE_BASE_PRIO = 200;
    constexpr uint32_t SUBJOB_TYPE_COPYMETA_PHASE_PRIO = 20;
    constexpr uint32_t SUBJOB_TYPE_TEARDOWN_PHASE_PRIO = 60;
    // UBC优先级最大值为65535
    constexpr uint32_t SUBJOB_TYPE_CHECK_SUBJOB_PHASE_PRIO = 60000;

    const std::string JOB_CTRL_PHASE_ALLOWLOCALNODE = "AllowBackupInLocalNode";
    const std::string JOB_CTRL_PHASE_CHECKBACKUPJOBTYPE = "CheckBackupJobType";
    const std::string JOB_CTRL_PHASE_PREJOB = "PrerequisiteJob";
    const std::string JOB_CTRL_PHASE_GENSUBJOB = "GenerateSubJob";
    const std::string JOB_CTRL_PHASE_EXECSUBJOB = "ExecuteSubJob";
    const std::string JOB_CTRL_PHASE_POSTJOB = "PostJob";

    const std::string SUBJOB_TYPE_TEARDOWN_JOBNAME = "NasBackup_Teardown";
    const std::string SUBJOB_TYPE_COPYMETA_JOBNAME = "NasBackup_CopyMeta";
    const std::string SUBJOB_TYPE_CREATE_SUBJOB_JOBNAME = "NasBackup_CreateSubJob";
    const std::string SUBJOB_TYPE_SET_CHANNELS_JOBNAME = "NasBackup_SetChannels";
    const std::string SUBJOB_TYPE_CHECK_SUBJOB_JOBNAME = "NasBackup_CheckSubJob";

    constexpr auto BACKUP_COPY_METAFILE = "/backup-copy-meta.json";
    constexpr auto BACKUP_JOBCNT_METAFILE = "_backup-jobcnt-meta.json";
    constexpr auto BACKUP_JOBSTAT_DIR = "/backup-job/backup/stats/";
    constexpr auto RESTORE_JOBSTAT_DIR = "/backup/stats/";

    const std::string FILTER_TYPE_FILE = "File";
    const std::string FILTER_TYPE_DIR  = "Dir";

    const std::string FILTER_MODEL_INCLUDE = "INCLUDE";
    const std::string FILTER_MODEL_EXCLUDE = "EXCLUDE";
    const std::string METAFILE_ZIP_NAME = "metafile.zip";
    const std::string METAFILE_PARENT_DIR = "filemeta";

    const std::string NFS_MOUNT_OPTION = "retry=1,timeo=3";
    const std::string CIFS_MOUNT_OPTION = "cache=strict,soft,nounix";

    const std::string NFS_VERSION_3 = "3";
    const std::string NFS_VERSION_4 = "4.0";
    const std::string NFS_VERSION_4_1 = "4.1";

    constexpr int REPORTSLEEPTIME = 1;
    constexpr uint32_t REPORT_INTERVAL = 90;
    constexpr uint32_t MAXBUFFERCNT = 10;
    constexpr uint32_t MAXBUFFERSIZE = 10 * 1024;
    constexpr uint32_t MAXERRORFILES = 10;

    constexpr int EXECEPTION_RETRY_TIMES = 15;
    constexpr int MIDDLE_EXECEPTION_RETRY_TIMES = 5;
    constexpr int EXECEPTION_RETRY_INTERVAL = 20;
    constexpr int NORMAL_RETRY_TIMES = 4;
    constexpr int MIDDLE_NORMAL_RETRY_TIMES = 2;
    constexpr int NORMAL_RETRY_INTERVAL = 20;

    constexpr int ONE_GB = 1024 * 1024 * 1024;
    constexpr int HALF_GB = ONE_GB / 2;
    constexpr int SCAN_CTRL_FILE_TIMES_SEC = 5;
    constexpr int SCAN_CTRL_MAX_ENTRIES_FULL_BACKUP = 100000;
    constexpr int SCAN_CTRL_MAX_ENTRIES_INCBKUP = 10000;
    constexpr uint32_t SCAN_CTRL_MIN_ENTRIES_FULL_BKUP = 100000;
    constexpr uint32_t SCAN_CTRL_MIN_ENTRIES_INC_BKUP = 10000;
    constexpr uint32_t SCAN_CTRL_MAX_QUEUE_SIZE = 10000;
    constexpr uint32_t PROGRESS_COMPLETE = 100;
    constexpr uint32_t MAX_OPEN_DIR_REQ_COUNT = 4000;
    constexpr uint32_t SLEEP_TEN_SECONDS = 10;
    const std::string META = "meta";
    const std::string SCAN = "scan";
    const std::string CTRL = "ctrl";
    const std::string DIRCACHE_FILE_NAME = "dircache";
    const std::string BACKUP = "backup";
    const std::string RESTORE = "restore";
    const std::string STATISTICS = "statistics";
    const std::string HARDLINK_CTRL_PREFIX = "hardlink";
    const std::string MTIME_CTRL_PREFIX = "mtime";
    const std::string DELETE_CTRL_PREFIX = "delete";
    const std::string CONTROL_CTRL_PREFIX = "control";

// deploy type
    const std::string X8000_DEPLOY_TYPE = "d0";
    const std::string X6000_DEPLOY_TYPE = "d1";
    const std::string X3000_DEPLOY_TYPE = "d2";
    const std::string ANTI_RANSOMWARE_DEPLOY_TYPE = "d4";
    const std::string SECURITY_MACHINE_DEPLOY_TYPE = "d5";
    const std::string X9000_DEPLOY_TYPE = "d6";
    
    const std::string XML_CONFIG_FILE = "/DataBackup/ProtectClient/ProtectClient-E/bin/xmlcfg";
    const std::string XML_READ_TYPE = XML_CONFIG_FILE + " read System deploy_type";
    const std::string RDADMIN_BASH = "su - rdadmin -s /bin/sh -c ";

    /**
    * nasHost.vendorsubType type strings passed in xxxx
    * We internally use GetVendorType() api to change from RPC input string to the enum as expected by Data_Transmission
    */
    const std::string NAS_VENDOR_TYPE_STR_NETAPP_ONTAP9 = "NetApp";
    const std::string NAS_VENDOR_TYPE_STR_HUAWEI_OCEANSTOR = "OceanStorV5";
    const std::string NAS_VENDOR_TYPE_STR_HUAWEI_FUSIONSTOR = "OceanStorPacific";
    const std::string NAS_VENDOR_TYPE_STR_HUAWEI_DORADO = "dorado";

    /*
    0 - replace exsisting files & directories
    1 - Ignore exsisting files
    2 - only replace the files that are older than restore files
    */
    const std::string REPLACE_POLICY_REPLACE_EXSISTING_FILESNFOLDERS   = "0";
    const std::string REPLACE_POLICY_IGNORE_EXSISTNG_FILES             = "1";
    const std::string REPLACE_POLICY_REPLACE_ONLY_IF_OLDER             = "2";

    const std::string NAS_FILTER_BY_NAME    = "Name";
    const std::string NAS_FILTER_BY_FORMAT  = "Format";
    const std::string NAS_FILTER_BY_CREATIONTIME  = "CreateTime";
    const std::string NAS_FILTER_BY_MODIFIEDTIME  = "ModifyTime";
    const std::string NAS_FILTER_BY_ACCESSTIME  = "AccessTime";

    const std::string NAS_FILTERTYPE_FILE = "File";
    const std::string NAS_FILTERTYPE_DIR  = "Dir";

    const std::string METADATA_TYPE_ONLY_FOLDERS   = "0";
    const std::string METADATA_TYPE_FILESNFOLDERS  = "1";

    // format value: 1-microsofr office file, 2-music and video file, 3-picture file,
    // 4- pdf file, 5-web page file, 6- compressed file , custom
    const std::string MICROSOFT_OFFICE_FILES = "1";
    const std::string MUSICNVIDEO_FILES = "2";
    const std::string PICTURE_FILES = "3";
    const std::string PDF_FILES = "4";
    const std::string WEB_PAGE_FILES = "5";
    const std::string COMPRESSES_FILES = "6";

    // Microsoft Office File Formats
    const std::vector<std::string> msOfficeFileFormatList = {"*.doc", "*.docx", "*.dot", "*.docm", "*.dotm", "*.dotx",
        "*.odt", "*.rtf", "*.htm", "*.html", "*.mht", "*.mhtml", "*.txt", "*.wps", "*.xml", "*.xps", "*.pot",
        "*.potm", "*.potx", "*.ppa", "*.ppam", "*.pps", "*.ppsm", "*.ppsx"};

    // Music and Video File Formats
    const std::vector<std::string> musicNvideoFileFormatList = {"*.wav", "*.pcm", "*.tta", "*.flac", "*.au", "*.ape",
        "*.tak", "*.mp3", "*.wv", "*.wma", "*.ogg", "*.aac", "*.flv", "*.avi", "*.wmv", "*.asf", "*.wmvhd", "*.dat",
        "*.vob", "*.mpg", "*.mpeg", "*.3gp", "*.3g2", "*.mkv", "*.rm", "*.rmvb", "*.mov", "*.qt", "*.ogv", "*.oga",
        "*.mod", "*.asx", "*.mp4", "*.m4v"};

    // Picture File Formats
    const std::vector<std::string> pictureFileFormatList = {"*.png", "*.bmp", "*.jpg", "*.tiff", "*.gif", "*.pcx",
        "*.tga", "*.exif", "*.fpx", "*.svg", "*.psd", "*.cdr", "*.pcd", "*.dxf", "*.ufo", "*.eps", "*.ai", "*.raw",
        "*.tif"};

    // Web Page File Formats
    const std::vector<std::string> webPageFileFormatList = {"*.xml", "*.html", "*.htm", "*.shtml", "*.asp", "*.pl",
        "*.cgi", "*.php", "*.mht", "*.mhtml"};

    // Compressed File Formats
    const std::vector<std::string> compressedFileFormatList = {"*.rar", "*.zip", "*.gz", "*.cab", "*.tar", "*.bz2",
        "*.jar", "*.iso", "*.7z", "*.tgz", "*.z", "*.tar.z"};

    constexpr int MAXIMUM_DME_NAS_BACKUP_ENABLED = 1;
    constexpr int DEFAULT_DME_NAS_BACKUP_ENABLED = 1;

    constexpr int MAXIMUM_DME_NAS_BACKUP_WRITE_ENABLE = 1;
    constexpr int DEFAULT_DME_NAS_BACKUP_WRITE_ENABLE = 1;

    constexpr int MAXIMUM_DME_NAS_BACKUP_READ_QUEUE_SIZE = 100000;
    constexpr int DEFAULT_DME_NAS_BACKUP_READ_QUEUE_SIZE = 200;

    constexpr int MAXIMUM_DME_NAS_BACKUP_READ_BLOCK_SIZE = 2048;
    constexpr int DEFAULT_DME_NAS_BACKUP_READ_BLOCK_SIZE = 1;

    constexpr int MAXIMUM_DME_NAS_BACKUP_FILEPATH_QUEUE_SIZE = 10000;
    constexpr int DEFAULT_DME_NAS_BACKUP_FILEPATH_QUEUE_SIZE = 10000;

    constexpr int MAXIMUM_DME_NAS_BACKUP_NO_ROOT_SQUASH = 1;
    constexpr int DEFAULT_DME_NAS_BACKUP_NO_ROOT_SQUASH = 1;

    constexpr int MAXIMUM_DME_NAS_BACKUP_LIBNFS_FH_CACHE_DISABLE = 1;
    constexpr int DEFAULT_DME_NAS_BACKUP_LIBNFS_FH_CACHE_DISABLE = 0;

    constexpr int MAXIMUM_DME_NAS_BACKUP_THREAD_POOL_CNT = 128;
    constexpr int DEFAULT_DME_NAS_BACKUP_THREAD_POOL_CNT = 64;

    constexpr int MAXIMUM_DME_NAS_REMOVE_CONTROL_FILE = 1;
    constexpr int DEFAULT_DME_NAS_REMOVE_CONTROL_FILE = 0;

    constexpr int MINIMUM_DME_NAS_BACKUP_MAX_PENDING_ASYNC_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MAX_PENDING_ASYNC_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MAX_PENDING_ASYNC_REQ_CNT = 100;

    constexpr int MINIMUM_DME_NAS_BACKUP_MIN_PENDING_ASYNC_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MIN_PENDING_ASYNC_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MIN_PENDING_ASYNC_REQ_CNT = 80;

    constexpr int MINIMUM_DME_NAS_BACKUP_MAX_PENDING_WRITE_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MAX_PENDING_WRITE_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MAX_PENDING_WRITE_REQ_CNT = 100;

    constexpr int MINIMUM_DME_NAS_BACKUP_MIN_PENDING_WRITE_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MIN_PENDING_WRITE_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MIN_PENDING_WRITE_REQ_CNT = 80;

    constexpr int MINIMUM_DME_NAS_BACKUP_MAX_PENDING_READ_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MAX_PENDING_READ_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MAX_PENDING_READ_REQ_CNT = 100;

    constexpr int MINIMUM_DME_NAS_BACKUP_MIN_PENDING_READ_REQ_CNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MIN_PENDING_READ_REQ_CNT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MIN_PENDING_READ_REQ_CNT = 80;

    constexpr int MINIMUM_DME_NAS_BACKUP_REQ_CNT_PER_NFS_CONTEXT = 10;
    constexpr int MAXIMUM_MAX_DME_NAS_BACKUP_REQ_CNT_PER_NFS_CONTEXT = 1000;
    constexpr int DEFAULT_DME_NAS_BACKUP_REQ_CNT_PER_NFS_CONTEXT = 20;

    constexpr int MINIMUM_DME_NAS_BACKUP_RW_BLOCKSIZE = 16;
    constexpr int MAXIMUM_DME_NAS_BACKUP_RW_BLOCKSIZE = 1024 * 1024;
    constexpr int DEFAULT_DME_NAS_BACKUP_RW_BLOCKSIZE = 1024 * 1024;
    constexpr int MINIMUM_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_CNT = 100;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_CNT = 10000;
    constexpr int DEFAULT_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_CNT = 500;
    constexpr int MINIMUM_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_SIZE = 1024 * 1024 * 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_SIZE = 1024 * 1024 * 1024;
    constexpr int DEFAULT_DME_NAS_BACKUP_MAX_TOTAL_BLOCK_BUFFER_SIZE = 1024 * 1024 * 50;

    constexpr int MINIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_MAX_ERR_COUNT = 10;
    constexpr int MAXIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_MAX_ERR_COUNT = 10000;
    constexpr int DEFAULT_DME_NAS_BACKUP_NAS_SERVER_CHECK_MAX_ERR_COUNT = 100;
    constexpr int MINIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_SLEEP_TIME = 1;
    constexpr int MAXIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_SLEEP_TIME = 255;
    constexpr int DEFAULT_DME_NAS_BACKUP_NAS_SERVER_CHECK_SLEEP_TIME = 180;
    
    constexpr int MINIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_RETRY_CNT = 1;
    constexpr int MAXIMUM_DME_NAS_BACKUP_NAS_SERVER_CHECK_RETRY_CNT = 10;
    constexpr int DEFAULT_DME_NAS_BACKUP_NAS_SERVER_CHECK_RETRY_CNT = 3;
    constexpr int MINIMUM_DME_NAS_AGGR_THREAD_POOL_CNT = 1;
    constexpr int MAXIMUM_DME_NAS_AGGR_THREAD_POOL_CNT = 128;
    constexpr int DEFAULT_DME_NAS_AGGR_THREAD_POOL_CNT = 64;
    constexpr int MINIMUM_DME_NAS_SCAN_CTRL_FILE_SIZE = 1048576;
    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_FILE_SIZE = 104857600;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_FILE_SIZE = 8388608;

    constexpr int MAXIMUM_DME_NAS_SCAN_LIBNFS_OPENDIR_REQ_CNT = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_LIBNFS_OPENDIR_REQ_CNT = 4000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_OPENDIR_REQ_CNT = 10000;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_OPENDIR_REQ_CNT = 500;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_MAX_WRITE_QUEUE_SIZE = 10000;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_MAX_WRITE_QUEUE_SIZE = 1000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_MAX_SCAN_QUEUE_SIZE = 50000;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_MAX_SCAN_QUEUE_SIZE = 10000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_MIN_SCAN_QUEUE_SIZE = 40000;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_MIN_SCAN_QUEUE_SIZE = 8000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_WRITE_QUEUE_SIZE = 1000;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_WRITE_QUEUE_SIZE = 1000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_DIR_ENTRY_READ_COUNT = 512;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_DIR_ENTRY_READ_COUNT = 512;

    constexpr int MAXIMUM_DME_NAS_SCAN_X6000_DEFAULT_META_FILE_SIZE = 512 * 1024 * 1024;
    constexpr int DEFAULT_DME_NAS_SCAN_X6000_DEFAULT_META_FILE_SIZE = 512 * 1024 * 1024;

    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_OPENDIR_REQ_CNT = 40000;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_OPENDIR_REQ_CNT = 2000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_MAX_WRITE_QUEUE_SIZE = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_MAX_WRITE_QUEUE_SIZE = 10000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_MAX_SCAN_QUEUE_SIZE = 1000000;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_MAX_SCAN_QUEUE_SIZE = 100000;

    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_MIN_SCAN_QUEUE_SIZE = 800000;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_MIN_SCAN_QUEUE_SIZE = 80000;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_WRITE_QUEUE_SIZE = 1000;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_WRITE_QUEUE_SIZE = 1000;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_DIR_ENTRY_READ_COUNT = 1024;
    constexpr int DEFAULT_DME_NAS_SCAN_X8000_DIR_ENTRY_READ_COUNT = 1024;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_X8000_DEFAULT_META_FILE_SIZE = 1024 * 1024 * 1024;
    constexpr int DME_NAS_SCAN_X8000_DEFAULT_META_FILE_SIZE = 1024 * 1024 * 1024;

    constexpr int MAXIMUM_DME_NAS_SCAN_EXTACL_DIR_ENABLED = 1;
    constexpr int DEFAULT_DME_NAS_SCAN_EXTACL_DIR_ENABLED = 0;

    constexpr int MAXIMUM_DME_NAS_SCAN_EXTACL_FILE_ENABLED = 1;
    constexpr int DEFAULT_DME_NAS_SCAN_EXTACL_FILE_ENABLED = 0;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MAX_ENTRIES_FULLBKUP = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MAX_ENTRIES_FULLBKUP = 10000;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MAX_ENTRIES_INCRBKUP = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MAX_ENTRIES_INCRBKUP = 1000;
    
    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MIN_ENTRIES_FULLBKUP = 50000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MIN_ENTRIES_FULLBKUP = 10000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MIN_ENTRIES_INCRBKUP = 50000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MIN_ENTRIES_INCRBKUP = 1000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_FILE_TIME_SEC = 120;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_FILE_TIME_SEC = 5;

    constexpr int MAXIMUM_DME_NAS_SCAN_THREAD_POOL_CNT = 64;
    constexpr int DEFAULT_DME_NAS_SCAN_THREAD_POOL_CNT = 32;

    constexpr int MAXIMUM_DME_NAS_SCAN_WRITE_TASK_INSTANCE_CNT = 64;
    constexpr int DEFAULT_DME_NAS_SCAN_WRITE_TASK_INSTANCE_CNT = 1;

    constexpr int MAXIMUM_DME_NAS_SCAN_WRITE_TASK_START_QUEUE_SIZE = 1000;
    constexpr int DEFAULT_DME_NAS_SCAN_WRITE_TASK_START_QUEUE_SIZE = 1000;

    constexpr int MAXIMUM_DME_NAS_SCAN_WRITE_TASK_STOP_QUEUE_SIZE = 5000;
    constexpr int DEFAULT_DME_NAS_SCAN_WRITE_TASK_STOP_QUEUE_SIZE = 5000;

    constexpr int MAXIMUM_DME_NAS_SCAN_DEFAULT_META_FILE_SIZE = 1024 * 1024 * 1024;
    constexpr int DEFAULT_DME_NAS_SCAN_DEFAULT_META_FILE_SIZE = 1024 * 1024 * 1024;

    constexpr int MAXIMUM_DME_NAS_SCAN_USE_LAST_BACKUP_TIME = 1;
    constexpr int DEFAULT_DME_NAS_SCAN_USE_LAST_BACKUP_TIME = 1;

    constexpr int MAXIMUM_DME_NAS_SCAN_LIBNFS_DIR_Q_POP_SIZE = 100;
    constexpr int DEFAULT_DME_NAS_SCAN_LIBNFS_DIR_Q_POP_SIZE = 20;

    constexpr int MAXIMUM_DME_NAS_SCAN_LIBNFS_READDIR_Q_POP_SIZE = 100;
    constexpr int DEFAULT_DME_NAS_SCAN_LIBNFS_READDIR_Q_POP_SIZE = 10;

    constexpr int MINIMUM_DME_NAS_SCAN_MAX_WRITE_QUEUE_SIZE = 5000;
    constexpr int MAXIMUM_DME_NAS_SCAN_MAX_WRITE_QUEUE_SIZE = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_MAX_WRITE_QUEUE_SIZE = 10000;

    constexpr int MINIMUM_DME_NAS_SCAN_MIN_WRITE_QUEUE_SIZE = 1000;
    constexpr int MAXIMUM_DME_NAS_SCAN_MIN_WRITE_QUEUE_SIZE = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_MIN_WRITE_QUEUE_SIZE = 8000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CHECKPOINT_ENABLED = 1;
    constexpr int DEFAULT_DME_NAS_SCAN_CHECKPOINT_ENABLED = 0;

    constexpr int MAXIMUM_DME_NAS_MAX_SCANNER_TASKS_PERNODE = 10;
    constexpr int DEFAULT_DME_NAS_MAX_SCANNER_TASKS_PERNODE = 1;

    constexpr int MINIMUM_DME_NAS_SCAN_CTRL_FILE_SIZE_AGGR = 1048576;
    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_FILE_SIZE_AGGR = 104857600;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_FILE_SIZE_AGGR = 8388608;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MAX_ENTRIES_FULLBKUP_AGGR = 200000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MAX_ENTRIES_FULLBKUP_AGGR = 10000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MAX_ENTRIES_INCRBKUP_AGGR = 100000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MAX_ENTRIES_INCRBKUP_AGGR = 1000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MIN_ENTRIES_FULLBKUP_AGGR = 50000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MIN_ENTRIES_FULLBKUP_AGGR = 10000;

    constexpr int MAXIMUM_DME_NAS_SCAN_CTRL_MIN_ENTRIES_INCRBKUP_AGGR = 50000;
    constexpr int DEFAULT_DME_NAS_SCAN_CTRL_MIN_ENTRIES_INCRBKUP_AGGR = 1000;

    constexpr int MAXIMUM_DME_NAS_SCANNER_MAX_SIZE = 9999;
    constexpr int DEFAULT_DME_NAS_SCANNER_MAX_SIZE = 5;
}
#endif // APPPLUGIN_NAS_PLUGINCONSTANTS_H